package com.gsdl.web.controller;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import org.apache.log4j.Logger;

import com.gsdl.model.delegate.BusinessDelegate;
import com.gsdl.model.entity.Utilizador;
import com.gsdl.model.entity.Deposito.TipoDeposito;
import com.gsdl.model.entity.Utilizador.PerfilUtilizador;
import com.gsdl.web.util.JsfUtil;


// TODO: Auto-generated Javadoc
/**
 * The Class UserController.
 *
 * @author Natacha Antonopoulos
 */

@ManagedBean
@ViewScoped
public class UserController implements Serializable{

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = 1287446873197459743L;

	/** The Constant LOG. */
	private static final Logger LOG = Logger.getLogger(UserController.class.getName());
	
	/** The login controller. */
	@ManagedProperty(value="#{loginController}")
	private LoginController loginController;
	
	/** The utilizador. */
	private Utilizador utilizador = new Utilizador();
	
	/** The novo utilizador. */
	private Utilizador novoUtilizador = new Utilizador();
	
	/** The utilizadores. */
	private List<Utilizador> utilizadores;
	
//	/** The Perfis utilizador. */
//	private List<PerfilUtilizador> PerfisUtilizador = new ArrayList<PerfilUtilizador>();
	
	/**
	 * Check if there is a utilizadorId as a request parameter. If there is sets the utilizador for details view
	 */
	@PostConstruct
	private void init() {
		String utilizadorId = JsfUtil.getRequestParameter("utilizadorId");
		if(utilizadorId != null && !utilizadorId.equals("")){
			utilizador = BusinessDelegate.getInstance().getUtilizadorById(Long.parseLong(utilizadorId));
		}
	}
	
	
	/**
	 * Save new utilizador action.
	 *
	 * @return the string
	 */
	public String saveNewUtilizadorAction(){
		BusinessDelegate.getInstance().saveUtilizador(novoUtilizador);
		return "utilizadores";
	}
	
	/**
	 * Save utilizador action.
	 *
	 * @return the string
	 */
	public String saveUtilizadorAction(){
		BusinessDelegate.getInstance().saveUtilizador(utilizador);
		return "utilizadores";
	}
	
	
	/**
	 * Novo user.
	 *
	 * @return the string
	 */
	public String novoUser(){
		novoUtilizador = new Utilizador();
		return "novoUtilizador";
	}

	/**
	 * Gets the utilizador.
	 *
	 * @return the utilizador
	 */
	public Utilizador getUtilizador() {
		return utilizador;
	}

	/**
	 * Sets the utilizador.
	 *
	 * @param utilizador the utilizador to set
	 */
	public void setUtilizador(Utilizador utilizador) {
		this.utilizador = utilizador;
	}

	/**
	 * Gets the utilizadores.
	 *
	 * @return the utilizadores
	 */
	public List<Utilizador> getUtilizadores() {
		utilizadores = BusinessDelegate.getInstance().getAllUsers();
		return utilizadores;
	}

	/**
	 * Sets the utilizadores.
	 *
	 * @param utilizadores the utilizadores to set
	 */
	public void setUtilizadores(List<Utilizador> utilizadores) {
		this.utilizadores = utilizadores;
	}

	
	/**
	 * Gets the login controller.
	 *
	 * @return the loginController
	 */
	public LoginController getLoginController() {
		return loginController;
	}

	/**
	 * Sets the login controller.
	 *
	 * @param loginController the loginController to set
	 */
	public void setLoginController(LoginController loginController) {
		this.loginController = loginController;
	}

	
	/**
	 * Gets the perfis utilizador.
	 *
	 * @return the perfisUtilizador
	 */
	public PerfilUtilizador[] getPerfisUtilizador() {
		return PerfilUtilizador.values();
	}
	
	
	/**
	 * Gets the novo utilizador.
	 *
	 * @return the novoUtilizador
	 */
	public Utilizador getNovoUtilizador() {
		return novoUtilizador;
	}

	/**
	 * Sets the novo utilizador.
	 *
	 * @param novoUtilizador the novoUtilizador to set
	 */
	public void setNovoUtilizador(Utilizador novoUtilizador) {
		this.novoUtilizador = novoUtilizador;
	}
	
	
}
